package com.sf.fy.uav.order.service;


import com.alibaba.fastjson.JSONObject;
import com.sf.fy.uav.common.request.common.IdRequest;
import com.sf.fy.uav.common.request.pricing.PricingAddRequest;
import com.sf.fy.uav.common.request.pricing.PricingEditRequest;
import com.sf.fy.uav.common.request.pricing.SysPricingRequest;
import com.sf.fy.uav.common.response.order.SysPricingResponse;
import com.sf.fy.uav.order.entity.Pricing;
import org.springframework.web.bind.annotation.RequestBody;

import java.math.BigDecimal;
import java.util.List;

/**
 * <p>
 * 计价表 服务类
 * </p>
 *
 * @author LTQ
 * @since 2023-05-19
 */
public interface IPricingService {

    /**
     * 获取配送价格及限制重量的配置
     *
     * @param takeoffCode 起飞航站code
     * @param landingCode 降落航站code
     * @param seconds     当前时间，单位秒
     * @return 价格以及限制重量的配置
     */
    Pricing getPrice(String takeoffCode, String landingCode, Integer seconds);


    /**
     * 获取配送价格及限制重量的配置
     *
     * @param productType 产品类型
     * @param seconds     当前时间，单位秒
     * @return 价格以及限制重量的配置
     */
    Pricing getPriceByProductType(Byte productType, Integer seconds);


    /**
     * 通过产品类型获取
     *
     * @param productTypes
     * @param seconds
     * @return
     */
    List<Pricing> getPriceByProductTypes(List<Byte> productTypes, Integer seconds);


    /**
     * 通过产品类型获取
     *
     * @param productTypes
     * @return
     */
    List<Pricing> getByProductTypes(List<Byte> productTypes);


    /**
     * 获取超范围之后的配送价格
     *
     * @param goodsWeight
     * @param jl
     * @param pricingId
     * @param price
     * @return
     */
    JSONObject calculateMarkup(double goodsWeight, BigDecimal jl, String pricingId, BigDecimal price);

    /**
     * 查询价格列表
     *
     * @param sysPricingRequest
     * @return
     */
    List<SysPricingResponse> getPricing(SysPricingRequest sysPricingRequest);

    /**
     * 获取总用户数
     *
     * @param sysPricingRequest
     * @return
     */
    Long getTotal(SysPricingRequest sysPricingRequest);

    /**
     * 添加
     *
     * @param pricingAddRequest
     */
    void add(PricingAddRequest pricingAddRequest);

    /**
     * 添加
     *
     * @param pricingEditRequest
     */
    void edit(PricingEditRequest pricingEditRequest);

    /**
     * 失效价格
     *
     * @param idRequest
     * @return
     */
    void disablePricing(@RequestBody IdRequest idRequest);
}
